package fiuba.dao.hibernate;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import fiuba.dao.ContenidoEstaticoDao;
import fiuba.model.Contenedor;
import fiuba.model.ContenidoEstatico;
import fiuba.model.Noticia;

import java.lang.Exception;
public class ContenidoEstaticoDaoHibernate extends GenericDaoHibernate<ContenidoEstatico,Long>
	implements ContenidoEstaticoDao{
    public ContenidoEstaticoDaoHibernate() {
        super(ContenidoEstatico.class);
    }
    
	public List<ContenidoEstatico> getAllByName() {
		return getHibernateTemplate().find("from ContenidoEstatico c ORDER BY c.nombre");			
	}
    
	public boolean tieneAsociaciones(Long id) {
		// Ver si esta en algun contenedor
		Session s = this.getSession();
		String sql = "SELECT COUNT(*) FROM itemcontenedor WHERE tipo = 'ES' AND idExterno ='" 
			+ id + "'";
		Query q = s.createSQLQuery(sql);
		List<Object> ret = q.list();
		java.math.BigInteger i = (java.math.BigInteger) ret.get(0);
		if (! i.equals(new java.math.BigInteger("0"))) {
			return true; // encontro + de 0 => tiene asociaciones
		}
		// Ver si esta en la configuracion
		sql = "SELECT COUNT(*) FROM configuracion WHERE contenidooffline_fk = '" 
			+ id + "'";
		q = s.createSQLQuery(sql);
		ret = q.list();
		i = (java.math.BigInteger) ret.get(0);
		if (! i.equals(new java.math.BigInteger("0"))) {
			return true; // encontro + de 0 => tiene asociaciones
		}
		return false;
	}
	
    public void remove(Long id) {
		// No dejar borrar si tiene asociaciones 
		if (tieneAsociaciones(id)) {
			throw new RuntimeException();
		}
    	super.remove(id);
    	return;
    	
    }
	public List<ContenidoEstatico> findVigentes(){
		return getHibernateTemplate().find("from ContenidoEstatico n WHERE n.fechaBaja = null");			
	}
	public List<ContenidoEstatico> findNoVigentes(){
		return getHibernateTemplate().find("from ContenidoEstatico n WHERE n.fechaBaja <> null");			
	}
}
